Khả năng Tính toán (CC) đóng vai trò như cầu nối phiên bản giữa kiến trúc ảo (PTX) và kiến trúc thực tế (SASS/Tệp nhị phân). Các nhà phát triển sử dụng nvcc để nhắm mục tiêu đến các nền tảng cụ thể, từ nền tảng máy tính để bàn/server đến nền tảng nhúng, trên các mô hình hệ điều hành như Linux 64-bit (LP64) hoặc Windows 64-bit (LLP64).
1. Kiến trúc Ảo so với Kiến trúc Thực tế
Bộ công cụ CUDA hỗ trợ kiến trúc GPU từ hai phiên bản chính gần nhất, được tham chiếu trong Bảng 29: Hỗ trợ Tính năng qua Các Khả năng Tính toán (7.5 đến 12.x). Chúng ta xác định các bản đồ bằng các cờ như: nvcc --generate-code arch=compute_80,code=sm_90 prog.cu. Đối với các mục tiêu hướng tương lai, các cờ như nvcc -arch=sm_100 hoặc các biến thể chuyên biệt như nvcc -arch=sm_100a được sử dụng.
2. Thứ tự các Biến số (Macro)
Trình biên dịch sử dụng __CUDA_ARCH__ để điều hướng mã nguồn. Biến số __CUDA_ARCH__ chỉ được định nghĩa trong mã thiết bị (ví dụ, __device__, __global__). Kiểm soát chi tiết hơn được cung cấp bởi __CUDA_ARCH_SPECIFIC__ và __CUDA_ARCH_FAMILY_SPECIFIC__. Một số tính năng, như Bộ nhớ chia sẻ phân tán hoặc các dữ liệu NaN đặc biệt, yêu cầu Khả năng Tính toán 9.0+ hoặc Khả năng Tính toán 10.0 trở lên.
3. Giới hạn và Ràng buộc về Số học
Độ chính xác thay đổi theo CC; ví dụ, xử lý số nhỏ đảm bảo $2^{-16382} \approx 3.36 \cdot 10^{-4932}$. Các giới hạn phần cứng như CUDA_DEVICE_MAX_COPY_CONNECTIONS=16 hoặc lệnh .maxnreg trong chỉ thị PTX đều được áp dụng nghiêm ngặt dựa trên phiên bản CC mục tiêu.